import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:r_upgrade/r_upgrade.dart';
import 'package:sn_progress_dialog/progress_dialog.dart';

import '../../model/initapp_model.dart';
import '../../utils/tools/localstorage_tool.dart';
import '../../utils/widget/appbar_widget.dart';
import '../../utils/widget/nodata_widget.dart';
import '../../utils/widget/toast_widget.dart';
import 'components/tips_widget.dart';
import 'methods/checkPermission.dart';

class UpdateView extends StatefulWidget {
  @override
  UpdateViewState createState() => new UpdateViewState();
}

class UpdateViewState extends State<UpdateView> {
  // 下载地址
  String downUrl;

  // 是否具备读取的权限
  bool isHavaPower;

  // 网络状态
  bool networkstate;

  // * 统计各项函数被执行的次数
  int implementCount = 0;

  // 标记当前app的状态（特指：异常情况0：网络异常  1：WebSocket已断开   2：重连WebSocket）
  int componentState;

  // 状态码：0：等待安装/1：安装失败/2：权限不足/2+ 正常情况
  int state = 99;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBarWidget("应用更新", isShowRI: false).build(context),
        body: Consumer<InitAppModel>(
          builder: (context, model, child) {
            // 将网络状态存储为全局状态，便于其他函数访问。（该状态会实时更新）
            networkstate = model.networkstate;

            // 必须保证网络通畅
            if (networkstate) {
              // 标记网络已恢复
              componentState = null;

              // 检查是否为初始化状态
              if (implementCount <= 0) {
                // 执行初始化操作
                initPage();

                // 统计执行次数
                implementCount++;
              }
            } else {
              // 标记网络异常
              componentState = 0;

              // 还原组件初始化状态
              if (implementCount > 0) {
                implementCount = 0;
              }
            }

            // 绘制组件
            return Center(
              child: networkstate ? TipsWidget(state) : NoData(),
            );
          },
        ));
  }

  /// 初始化组件
  void initPage() async {
    // 清空所有缓存
    // LocalStorage.clear();

    // 读取权限
    isHavaPower = await checkPermission();

    // 根据权限向下执行
    if (!isHavaPower) {
      ToastWidget.result(type: false, title: "请开启读写权限");
      setState(() {
        state = 2;
      });
    } else {
      // 获取下载地址
      downUrl = await LocalStorage.getStringItem("appUpdateUrl");

      // 执行下载
      updateApp(downUrl);
    }
  }

  /// app更新
  /// * [url] String|必填|下载地址
  void updateApp(String url) async {
    // 开启下载弹窗
    ProgressDialog pd = ProgressDialog(context: context);

    pd.show(
      max: 100,
      msg: "正在解析文件...",
      progressValueColor: Colors.blue,
      progressBgColor: Colors.black26,
      progressType: ProgressType.valuable,
    );

    await RUpgrade.upgrade(url,
        fileName: "pdyw.apk",
        isAutoRequestInstall: true,
        upgradeFlavor: RUpgradeFlavor.normal);

    RUpgrade.stream.listen((DownloadInfo info) {
      // 正在下载中
      pd.update(value: info.percent.toInt(), msg: "正在下载...");

      // 下载完成关闭，提示窗
      if (info.status == DownloadStatus.STATUS_SUCCESSFUL) {
        setState(() {
          state = 0;
        });
        pd.close();
      }

      // 下载完成关闭，提示窗
      if (info.status == DownloadStatus.STATUS_FAILED) {
        setState(() {
          setState(() {
            state = 1;
          });
        });
        pd.close();
      }
    });
  }
}
